home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / Numeric / UserArray.py < prev    next >
Text File  |  2006-01-20  |  8KB  |  222 lines

  1. from Numeric import *
  2. import string
  3.  
  4. class UserArray:
  5.     def __init__(self, data, typecode = None, copy=1, savespace=0):
  6.         self.array = array(data, typecode, copy, savespace)
  7.         self.shape = self.array.shape
  8.         self._typecode = self.array.typecode()
  9.         self.name = string.split(str(self.__class__))[0]
  10.  
  11.     def __repr__(self):
  12.         if len(self.array.shape) > 0:
  13.             return self.__class__.__name__+repr(self.array)[len("array"):]
  14.         else:
  15.             return self.__class__.__name__+"("+repr(self.array)+")"
  16.  
  17.     def __array__(self,t=None):
  18.         if t: return asarray(self.array,t)
  19.         return asarray(self.array)
  20.  
  21.     def __float__(self):
  22.         return float(asarray(self.array))
  23.  
  24.     # Array as sequence
  25.     def __len__(self): return len(self.array)
  26.  
  27.     def __getitem__(self, index): 
  28.         return self._rc(self.array[index])
  29.  
  30.     def __getslice__(self, i, j): 
  31.         return self._rc(self.array[i:j])
  32.  
  33.  
  34.     def __setitem__(self, index, value): self.array[index] = asarray(value,self._typecode)
  35.     def __setslice__(self, i, j, value): self.array[i:j] = asarray(value,self._typecode)
  36.  
  37.     def __del__(self):
  38.         # necessary?
  39.         for att in self.__dict__.keys():
  40.             delattr(self,att)
  41.  
  42.     def __abs__(self): return self._rc(absolute(self.array))
  43.     def __neg__(self): return self._rc(-self.array)
  44.  
  45.     def __add__(self, other): 
  46.         return self._rc(self.array+asarray(other))
  47.     __radd__ = __add__
  48.  
  49.     def __iadd__(self, other):
  50.         add(self.array, other, self.array)
  51.         return self
  52.         
  53.     def __sub__(self, other): 
  54.         return self._rc(self.array-asarray(other))
  55.     def __rsub__(self, other): 
  56.         return self._rc(asarray(other)-self.array)
  57.     def __isub__(self, other):
  58.         subtract(self.array, other, self.array)
  59.         return self
  60.  
  61.     def __mul__(self, other): 
  62.         return self._rc(multiply(self.array,asarray(other)))
  63.     __rmul__ = __mul__
  64.     def __imul__(self, other):
  65.         multiply(self.array, other, self.array)
  66.         return self
  67.  
  68.     def __div__(self, other): 
  69.         return self._rc(divide(self.array,asarray(other)))
  70.     def __rdiv__(self, other): 
  71.         return self._rc(divide(asarray(other),self.array))
  72.     def __idiv__(self, other):
  73.         divide(self.array, other, self.array)
  74.         return self
  75.     
  76.     def __mod__(self, other):
  77.         return self._rc(remainder(self.array, other))
  78.     def __rmod__(self, other):
  79.         return self._rc(remainder(other, self.array))
  80.     def __imod__(self, other):
  81.         remainder(self.array, other, self.array)
  82.         return self
  83.     
  84.     def __divmod__(self, other):
  85.         return (self._rc(divide(self.array,other)),
  86.                 self._rc(remainder(self.array, other)))
  87.     def __rdivmod__(self, other):
  88.         return (self._rc(divide(other, self.array)),
  89.                 self._rc(remainder(other, self.array)))
  90.  
  91.     def __pow__(self,other): 
  92.         return self._rc(power(self.array,asarray(other)))
  93.     def __rpow__(self,other): 
  94.         return self._rc(power(asarray(other),self.array))
  95.     def __ipow__(self,other):
  96.         power(self.array, other, self.array)
  97.         return self
  98.             
  99.     def __lshift__(self,other):
  100.         return self._rc(left_shift(self.array, other))
  101.     def __rshift__(self,other):
  102.         return self._rc(right_shift(self.array, other))
  103.     def __rlshift__(self,other):
  104.         return self._rc(left_shift(other, self.array))
  105.     def __rrshift__(self,other):
  106.         return self._rc(right_shift(other, self.array))
  107.     def __ilshift__(self,other):
  108.         left_shift(self.array, other, self.array)
  109.         return self
  110.     def __irshift__(self,other):
  111.         right_shift(self.array, other, self.array)
  112.         return self
  113.  
  114.     def __and__(self, other):
  115.         return self._rc(bitwise_and(self.array, other))
  116.     def __rand__(self, other):
  117.         return self._rc(bitwise_and(other, self.array))
  118.     def __iand__(self, other):
  119.         bitwise_and(self.array, other, self.array)
  120.         return self
  121.  
  122.     def __xor__(self, other):
  123.         return self._rc(bitwise_xor(self.array, other))
  124.     def __rxor__(self, other):
  125.         return self._rc(bitwise_xor(other, self.array))
  126.     def __ixor__(self, other):
  127.         bitwise_xor(self.array, other, self.array)
  128.         return self
  129.  
  130.     def __or__(self, other):
  131.         return self._rc(bitwise_or(self.array, other))
  132.     def __ror__(self, other):
  133.         return self._rc(bitwise_or(other, self.array))
  134.     def __ior__(self, other):
  135.         bitwise_or(self.array, other, self.array)
  136.         return self
  137.             
  138.     def __neg__(self):
  139.         return self._rc(-self.array)
  140.     def __pos__(self):
  141.         return self._rc(self.array)
  142.     def __abs__(self):
  143.         return self._rc(abs(self.array))
  144.     def __invert__(self):
  145.         return self._rc(invert(self.array))
  146.  
  147.     def _scalarfunc(a, func):
  148.         if len(a.shape) == 0:
  149.             return func(a[0])
  150.         else:
  151.             raise TypeError, "only rank-0 arrays can be converted to Python scalars."
  152.         
  153.     def __complex__(self): return self._scalarfunc(complex)
  154.     def __float__(self): return self._scalarfunc(float)
  155.     def __int__(self): return self._scalarfunc(int)
  156.     def __long__(self): return self._scalarfunc(long)
  157.     def __hex__(self): return self._scalarfunc(hex)
  158.     def __oct__(self): return self._scalarfunc(oct)
  159.  
  160.     def __lt__(self,other): return self._rc(less(self.array,other))
  161.     def __le__(self,other): return self._rc(less_equal(self.array,other))
  162.     def __eq__(self,other): return self._rc(equal(self.array,other))
  163.     def __ne__(self,other): return self._rc(not_equal(self.array,other))
  164.     def __gt__(self,other): return self._rc(greater(self.array,other))
  165.     def __ge__(self,other): return self._rc(greater_equal(self.array,other))
  166.         
  167.     def copy(self): return self._rc(self.array.copy())
  168.  
  169.     def tostring(self): return self.array.tostring()
  170.  
  171.     def byteswapped(self): return self._rc(self.array.byteswapped())
  172.  
  173.     def astype(self, typecode): return self._rc(self.array.astype(typecode))
  174.    
  175.     def typecode(self): return self._typecode
  176.  
  177.     def itemsize(self): return self.array.itemsize()
  178.  
  179.     def iscontiguous(self): return self.array.iscontiguous()
  180.  
  181.     def _rc(self, a):
  182.         if len(shape(a)) == 0: return a
  183.         else: return self.__class__(a)
  184.  
  185.     def __setattr__(self,attr,value):
  186.         if attr=='shape':
  187.             self.array.shape=value
  188.         self.__dict__[attr]=value
  189.  
  190.     def __getattr__(self,attr):
  191.         # for .attributes for example, and any future attributes
  192.         if attr == 'real':
  193.             return self._rc(self.array.real)
  194.         elif attr == 'imag':
  195.             return self._rc(self.array.imag)
  196.         elif attr == 'flat':
  197.             return self._rc(self.array.flat)
  198.         return getattr(self.array, attr)
  199.             
  200. #############################################################
  201. # Test of class UserArray
  202. #############################################################
  203. if __name__ == '__main__':
  204.     import Numeric
  205.  
  206.     temp=reshape(arange(10000),(100,100))
  207.  
  208.     ua=UserArray(temp)
  209.     # new object created begin test
  210.     print dir(ua)
  211.     print shape(ua),ua.shape # I have changed Numeric.py
  212.  
  213.     ua_small=ua[:3,:5]
  214.     print ua_small
  215.     ua_small[0,0]=10  # this did not change ua[0,0], wich is not normal behavior
  216.     print ua_small[0,0],ua[0,0]
  217.     print sin(ua_small)/3.*6.+sqrt(ua_small**2)
  218.     print less(ua_small,103),type(less(ua_small,103))
  219.     print type(ua_small*reshape(arange(15),shape(ua_small)))
  220.     print reshape(ua_small,(5,3))
  221.     print transpose(ua_small)
  222.